Third party integration of plugins and widgets

ABSTRACT

This disclosure relates to widget integration. Embodiments include receiving a workflow definition specifying one or more widgets to be loaded into a shell executing within a given application, the shell comprising a runtime environment, the one or more widgets comprising at least a first cross-platform widget. Embodiments include instantiating the runtime environment for the first cross-platform widget, the runtime environment including a bridge interface for facilitating communications between each widget in the one or more widgets and the given application. Embodiments include loading the first cross-platform widget into the runtime environment. Embodiments include processing, through the bridge interface, a communication from the first cross-platform widget running within the shell, wherein the communication comprises a result of executing a function. Embodiments include determining, by the bridge interface, that a condition has been satisfied based on the communication and transmitting a message to the given application based on the condition being satisfied.

CROSS REFERENCE TO RELATED APPLICATIONS

This Application is a continuation of and hereby claims priority under35 U.S.C. § 120 to pending U.S. patent application Ser. No. 15/852,566,filed on Dec. 22, 2017, the contents of which are incorporated herein intheir entirety.

BACKGROUND Field

Aspects of the present disclosure generally relate to techniques forthird-party integration of plugins and widgets, and more specifically toimplementing a consistent user experience across different platforms.

Description of the Related Art

Software applications can be consumed on a variety of devices, includingdesktop computers, laptop computers, tablet computers, smartphones, andthe like. These applications may be native applications (e.g.,applications for which an executable file is built specifically for thatplatform), web components hosted in a native application, or webapplications in which data provided by a user is processed remotely. Inmany cases, building an application for different platforms entails theuse of platform-specific code monoliths, which include code forgenerating a user interface tightly bound to the application logic. Insome cases, applications targeting a particular platform (e.g., a devicetype, an operating system, or both) do not work on variations of thatplatform (e.g., a common operating system spanning multiple smartphonemodels), resulting in developers having to write application logic thataccommodates different devices on the common platform.

As the number of applications targeting different platforms andapplications supporting variations on a common workflow increases, thedifficulty in providing a different version of the same application anduser experience for each device increases. For example, a set of taxpreparation applications perform the same general task of preparing auser's taxes, but a variety of discrete software artifacts may exist forvariations in the workflow (e.g., one artifact may execute a workflowfor preparing a simple tax return for a taxpayer in the United States,another artifact may execute a workflow for preparing a complex taxreturn for a taxpayer in the United States, another artifact may executea workflow for preparing a simple tax return in Canada, and the like).While these applications may perform the same general task (e.g., of taxpreparation) and may share a significant amount of code, eachapplication may also implement custom code dedicated to performing atask according to each platform.

Because these applications may implement a combination of custom andshared application logic that is bound to the user interface of theapplication, building and maintaining these applications generallyrequires large amounts of development time. Similarly, to maintain aconsistent user experience across all platforms, applications, andvariations of a workflow requires additional amounts of development timeand resources. For example, if a common code component is modified, adeveloper may need to verify that the modification does not adverselyaffect the operation of applications that use the common code component(e.g., render custom code components in a specific application unusableor otherwise modify the functionality of the custom code components).Further, as new variants of a workflow are identified, additionalapplications may be built, which adds to the universe of applications tobe maintained.

Therefore, there is a need for systems that reduce the amount of timeneeded to develop, update, and deploy applications across differentplatforms.

SUMMARY

One embodiment of the present disclosure includes a system comprising aprocessor and a memory. The memory comprises executable instructions,which, when executed by the processor, cause the system to receive, froman application server, a workflow definition specifying one or morewidgets to be loaded into a runtime environment, the one or more widgetscomprising at least the first cross-platform widget. The memory furthercomprises instructions which, when executed by the processor, cause thesystem to obtain, from the application server, the first cross-platformwidget. The memory further comprises instructions which, when executedby the processor, cause the system to instantiate the runtimeenvironment for the first cross-platform widget, the runtime environmentincluding a bridge interface for facilitating communications betweeneach widget in the one or more widgets and the second application. Thememory further comprises instructions which, when executed by theprocessor, cause the system to load the first cross-platform widget intothe runtime environment. The memory further comprises instructionswhich, when executed by the processor, cause the system to process,through the bridge interface, a communication between the firstcross-platform widget and the second application, the communicationinvoking an event at one or more of the first cross-platform widget orthe second application.

Another embodiment provides a computer-readable storage medium havinginstructions, which, when executed on a processor, perform an operationfor executing a first cross-platform widget for a first applicationwithin a second application. The operation generally includes receiving,from an application server, a workflow definition specifying one or morewidgets to be loaded into a runtime environment, the one or more widgetscomprising at least the first cross-platform widget. The operation alsoincludes obtaining, from the application server, the firstcross-platform widget. The operation also includes instantiating theruntime environment for the first cross-platform widget, the runtimeenvironment including a bridge interface for facilitating communicationsbetween each widget in the one or more widgets and the secondapplication. The operation also includes loading the firstcross-platform widget into the runtime environment. The operation alsoincludes processing, through the bridge interface, a communicationbetween the first cross-platform widget and the second application, thecommunication invoking an event at one or more of the firstcross-platform widget or the second application.

Still another embodiment of the present disclosure includes a method forexecuting a first cross-platform widget for a first application within asecond application. The method generally includes receiving, from anapplication server, a workflow definition specifying one or more widgetsto be loaded into a runtime environment, the one or more widgetscomprising at least the first cross-platform widget. The method alsoincludes obtaining, from the application server, the firstcross-platform widget. The method also includes instantiating theruntime environment for the first cross-platform widget, the runtimeenvironment including a bridge interface for facilitating communicationsbetween each widget in the one or more widgets and the secondapplication. The method also includes loading the first cross-platformwidget into the runtime environment. The method also includesprocessing, through the bridge interface, a communication between thefirst cross-platform widget and the second application, thecommunication invoking an event at one or more of the firstcross-platform widget or the second application.

BRIEF DESCRIPTION OF THE DRAWINGS

So that the manner in which the above recited features of the presentdisclosure can be understood in detail, a more particular description ofthe disclosure, briefly summarized above, may be had by reference toembodiments, some of which are illustrated in the appended drawings.Note, however, that the appended drawings illustrate only exemplaryembodiments and are therefore not to be considered limiting of the scopeof the disclosure, for the disclosure may admit to other equallyeffective embodiments.

FIG. 1 illustrates an exemplary computing system in which userinterfaces are dynamically generated and deployed to client devicesexecuting a cross-platform application, according to one embodiment.

FIG. 2 illustrates an exemplary system architecture for dynamicallygenerating and deploying user interfaces in cross-platform applications,according to one embodiment.

FIG. 3 illustrates an example shell framework architecture fordynamically generating and deploying user interfaces to client devicesexecuting a cross-platform application, according to one embodiment.

FIG. 4 illustrates an exemplary shell core that integrates plugins andwidgets into an application, according to one embodiment.

FIG. 5 illustrates example operations for invoking an event at across-platform widget, according to one embodiment.

FIG. 6 is a call flow diagram illustrating an example message exchangebetween an application and a widget for invoking an event at the widget,according to one embodiment.

FIG. 7 illustrates example operations for invoking an event at theapplication to transition from a first widget to a second widget,according to one embodiment.

FIG. 8 illustrates an exemplary computing system for deployingcross-platform applications on a client device while maintaining aconsistent user experience across platforms, according to oneembodiment.

DETAILED DESCRIPTION

To reduce the amount of code to be maintained in a universe of relatedapplications, software applications may be developed using a “writeonce, run anywhere” development paradigm. Typically, write once, runanywhere paradigms include an interpreter used to execute program codecompiled into a common language, and allow for the generation anddeployment of a single software artifact across different platforms. Asused herein, a platform may include a device type (e.g., desktopcomputer, laptop computer, tablet computer, smartphone, and the like),an operating system (OS) type (e.g., an OS executing on a device), orboth, etc. For example, a platform may include a particular device typeregardless of OS executing on the device, a particular OS regardless ofdevice type, or may be dependent on both the device type and OS. Thatis, one OS may span multiple device types (e.g. different modelsmartphones) and one device type may span multiple OSes (e.g., a singledeployed model of a smartphone running different versions of an OS). Insome instances, the platform may be further defined by attributes of thedevice type, such as screen formats (e.g., screen size, screenresolution, etc.) and input capabilities (e.g., multi-touch sensitivedisplays, pressure sensitive displays, and others). Thus, a platform maybe defined as a set of device types, operating systems, and/orcapabilities on which a particular software application may run.

Different software artifacts including user interface components mayneed to be generated for different variations of a workflow and/ordifferent types of platforms due to usability differences between thedifferent types of devices (e.g., different user interfaces for desktop,web, and mobile applications, different capabilities of different typesof devices, and the like). Different software artifacts may also need tobe generated due to physical differences between types of devices (e.g.,screen size, screen resolution, etc.) and differences in touchcapabilities (e.g., determining a firmness of a touch) and gesturecapabilities (i.e., what types of gestures are recognized by thedevice).

Because different software artifacts are generated for differentvariations of a workflow, developers may still need to debug a multitudeof different software artifacts when changes are propagated to sharedportions of application code. Further, the different software artifactsdeveloped for variations in a workflow are typically tightly bound toapplication logic. This may cause developers to spend significant timeto ensure that changes to application logic do not alter the userinterface or user experience in an unexpected manner and to ensure thatchanges to the user interface do not alter or break the expectedfunctionality of the underlying application logic.

Aspects of the present disclosure generally provide a bridge interfaceof a shell that allows communication between applications and modularuser interface components loaded into the shell. Specifically, thebridge interface provides a consistent communication channel andprotocol between a native application and both native and non-nativewidgets. For example, a non-native widget may not be able to communicatewith a native application due to differences in communication protocols.The bridge provides a communication interface that may listen for anevent transmitted from the application and then transmit that event tothe application.

The shell may be loaded into the application and provide a runtimecontainer in which modular widgets can execute. For example, the shellmay provide a common runtime environment in which all non-native widgetsexecute within a native environment. The shell also provides the widgetswith common services, such as activity logging, analytics, contexttracking, and the like. The shell may expose one or more ApplicationProgramming Interfaces (APIs), including a widget API to be used byapplications for loading widgets into or unloading widgets from theshell and a sandbox API for widgets to access the common services. Thewidget API may be defined by the shell and may be a common API for allwidgets, whether native or non-native. Thus, the widget API provides acentralized API that can be used by different applications executing ondifferent platforms.

The shell may also centralize common services for all widgets. Nativeand non-native widgets executing within a native application may providea consistent user experience for an application regardless of theplatform on which the application executes. Thus, the combination ofnative and non-native widgets may allow the application to be executedon different platforms (e.g., a cross-platform application). Forexample, when a user interface of an application comprisescross-platform widgets that are not tied to the application logic, thesame user interface can be rendered on various platforms. Thus, the userexperience is consistent between platforms.

As disclosed herein, the bridge interface may improve the operation of aclient device implementing the shell and bridge interface in severalaspects. First, the bridge interface and modular user interfacecomponents improve the speed and performance of the client device bydividing an application workflow into manageable workflow steps. Thus, asystem, in which a shell and a bridge interface are executing, mayperform functions of the workflow with fewer computing resourcesexpended. As a consequence of expending fewer resources, the functionsof the workflow may be performed more quickly. Further, an amount ofprocessing resources and memory necessary to render a user interface maybe decreased by virtue of the modular user interface components and thecommon bridge interface. For these reasons and others, a device on whicha shell and bridge are executing may perform faster and with fewerprocessing and memory resources necessary. Similarly, the modular userinterface component themselves will perform better than knownapplication programming techniques for the reasons described above.

FIG. 1 illustrates an exemplary computing system. As illustrated,computing system 100 includes a client device 120, a server computer130, an application server 140, a plugin definition repository 150, awidget repository 160, a user interface (UI) component repository 170,and an application logic repository 180, connected via network 110.

Client device 120 may be any sort of computing device, such as a desktopcomputer, a laptop computer, a tablet computer, a smartphone, or thelike. Client device 120 may execute an application 122 that communicateswith the server computer 130 to obtain a user interface for theapplication 122 and provide data to the server computer 130 forprocessing. In one example, the application 122 executes a multi-stepworkflow where each step of the workflow is displayed as a set ofinterface components that are built dynamically based, at least in part,on the platform and the current state of the application (e.g., aprogress state of a workflow).

In some cases, a workflow definition may include native user interfaceelements, which may be specific to a platform, as well as web-based userinterface elements, which may be shared across different platforms andallow for a common user interface to be generated across multipleplatforms. In one embodiment, the collection of user interface elementsmay be selected based on a particular platform as well as an applicationstate (e.g., a progress state of a workflow). For example, a workflowstep definition for a step of a tax preparation workflow could include acombination of web-based user interface elements used to manually addform data along with native user interface components that allow theapplication 122 to capture and process data from a camera at the clientdevice 120. The web-based and native user interface components may bestored in the user interface component repository 170. In anotherportion of the tax preparation workflow, where a user is asked toidentify deductions the user is entitled to claim, the workflowdefinition may identify a number of web-based user interface elementsfrom the user interface component repository 170 to render in theapplication 122.

In some embodiments, native code components may also be included in aworkflow definition to take advantage of functionality exposed by theoperating system executing on the client device 120. For example, nativecode components may be referenced in a workflow definition thatgenerates notifications related to the application 122. In otherexamples, native code components can be referenced in a workflowdefinition to allow users to provide voice data into the application122, engage in video chats with other users or with live supportrepresentatives using the application 122, etc. Further, native codecomponents may be referenced in a workflow definition to enable a userto take advantage of input methods and technologies particular to aplatform, such as a multi-touch and/or pressure-sensitive touchscreendisplay, etc.

As a user interacts with the application 122, the application 122 maytransmit user-provided data and context information to the applicationserver 140. The application server 140 may transmit the user-provideddata and context information to the server computer 130 for processing.The context information may include device information (e.g., the typeof device, the operating system executing on the device, capabilities ofthe device, and the like) and application state information. Theapplication state information may include the current version of aworkflow definition (e.g., widget definitions and/or updated rules forprocessing user-provided data) for a specific step of a workflow cachedat the client device 120, the current step of the workflow executing inthe application 122 (i.e., a progress state of the workflow), and avariation of the application a user is executing (e.g., the version ofthe application specific to a geographical region in which the clientdevice 120 is located). When the application 122 submits data to theapplication server 140, the application 122 may invoke a specificfunction in the workflow definition according to the data elementsspecified as inputs to the specific function. In response totransmitting data to the application server 140, the application 122 mayreceive a new workflow definition identifying the present step of theworkflow, the user interface elements to be displayed on the clientdevice 120, and the function(s) to be invoked upon completion of dataentry for the present step of the workflow.

The application server 140 may access and obtain data stored by a thirdparty and related to the platform or a user of the client device 120.For example, if the third party is a financial institution, theapplication server 140 may access data related to financial accounts ofthe user. If the third party is an employer of the user, the applicationserver 140 may access data identifying the user (e.g., name, position,location, etc.), data related to the employment of the user (e.g.,length of employment, salary, etc.), or documents generated by the thirdparty and related to the user (e.g., W2, performance evaluations, etc.).

The data obtained by the application server 140 may be limited to datafor which the user is authenticated. The application 122 may transmitauthentication information of the user to the application server 140.For example, a user interface element displayed on the client device 120may request the user to input authentication information (e.g., ausername and password) into the application 122. The application 122 maythen transmit the authentication information to the application server140. Upon receiving requested data from the application server 140, theapplication 122 may render the received data as part of the userinterface displayed on the client device 120 or use the received data inexecuting the current workflow.

The application server 140 may receive user input from the client device120. The user input may be transmitted to the server computer 130 togenerate a workflow definition for the client device to display userinterface elements for the next step of a workflow based on the receiveduser input. As illustrated in FIG. 1 , the server computer 130 includesan input processor 132, an interface generator 134, and an API service136. While the server computer 130 is depicted as a single server inFIG. 1 , in other embodiments the functions of the server computer 130(e.g., functions of the input processor 132, the interface generator134, and the API service 136) may be implemented on more than oneserver.

The input processor 132 may receive user-provided data from theapplication 122 (e.g., form input), an indication of the next step to beperformed in a workflow executing in the application 122, and othercontext information from the client device 120 for processing. The inputprocessor 132 generally invokes one or more functions exposed by the APIservice 136 and identified in the user-provided data. The inputprocessor 132 may examine any other data provided by the client device120 to generate a workflow definition for the client device 120including one or more plugins from the plugin definition repository 150.

A plugin may include a collection of widgets that the client device 120and/or the server computer 130 can use to represent a discrete task. Aplugin may reference one or more functions defined in the API service136 that are invoked to complete the discrete task. Each widget maydefine a collection of user interface elements to render on the clientdevice 120 to complete a workflow step or to enable a user to input datainto the application 122. The plugin may identify included widgets,functions the plugin can invoke in the API service 136, permissionsassociated with the plugin, behaviors of the plugin, intendedinteractions with other parts of a service, such as API service 136, andthe like. Each plugin may be versioned as the widget definitions and/orapplication logic associated with a plugin is updated.

In some cases, the input processor 132 may receive information about thecurrent version of a workflow definition associated with a plugin cachedat the client device 120. If the input processor 132 determines that thecurrent version of the plugin in the plugin definition repository 150matches the version of the plugin cached at the client device 120, theinput processor 132 can indicate to the client device 120 to render theuser interface associated with the next step in the workflow using thecached version. Because the cached version of the workflow definition atclient device 120 is the most current version of the workflowdefinition, input processor 132 need not invoke the interface generator134 to generate an updated workflow definition for the user interfaceassociated with the next step of the workflow to be displayed on theclient device 120.

If, however, the input processor 132 determines that the current versionof the workflow definition cached at the client device 120 is outdatedor that no workflow definition for the requested step of the workflowexists at the client device 120, input processor can invoke theinterface generator 134 to generate the workflow definition for therequested step of the workflow. In some cases, the input processor 132may invoke the generation of a workflow definition by the interfacegenerator 134 with information identifying the requested step of theworkflow and device-specific information (e.g., device type, operatingsystem, whether the application is a native application or is executingin a web-based shell, and other device-specific information).

The interface generator 134 may generate a workflow definition using theinformation received from the client device 120 and transmit theworkflow definition to the client device 120 or application server 140for rendering and execution by the application 122. To generate theworkflow definition, the interface generator 134 uses the informationidentifying the requested step of the workflow and the contextinformation to identify and select one or more plugins for populatingthe workflow definition. The interface generator 134 may populate theworkflow definition according to a defined order in which the userinterface elements of the widgets associated with the one or moreplugins are to be rendered on the client device 120 and transmit theworkflow definition to the client device 120. The interface generator134 may generate a workflow definition referencing non-native userinterface components, native user interface components, or a combinationthereof. The workflow definition may additionally reference one or morefunctions that can be invoked by the generated user interface. Thesefunctions may commit data to one or more data stores associated with theapplication 122, transmit data to the server computer 130 forprocessing, or route user-provided data to one or more expert systems onthe server computer 130 for analysis (e.g., to guide a user through aworkflow).

Because the workflow definition references one or more functions thatcan be executed through the generated user interface, but generally doesnot include the code for executing the one or more functions, the servercomputer 130 allows for decoupling of the user interface and theapplication logic for performing a task. Thus, the client device 120generally receives a workflow definition that is platform specific,i.e., customized for the client device on which the application 122 isexecuting. The workflow definition interacts with underlying applicationlogic that may be implemented as a single code base maintainedindependently from platform-specific code (e.g., stored in applicationlogic repository 180). Common application components need not beduplicated, updated, and tested for platform-specific versions of thesame application.

Application logic may need to be changed to support new variations of aworkflow, to modify how data is processed at a specific step in aworkflow, and the like. These changes in application logic generally donot affect the functionality of a generated user interface, and updatedapplication logic may be executed by client devices without buildingdiscrete software artifacts with the updated application logic. Forexample, suppose that the application 122 is a tax preparationapplication executing on a client device 120 and that the user of theclient device 120 is attempting to provide wage income data to theapplication 122. The interface generator 134 may identify multipleplugins that can be executed on the client device 120 to allow a user toimport wage income data into the application 122.

For example, one plugin may allow a user to capture one or more imagesof a document (e.g., as still images or a live stream from a cameraintegrated into or otherwise connected to the client device 120) andprovide the data extracted from the document to the API service 136.Because this plugin interfaces directly with device-specificcapabilities, this plugin may include references to device-specific(i.e., native) logic and user interface elements tied to image captureand data extraction. Meanwhile, another plugin may generate a form usedto input data. The interface generator 134 may generate a workflowdefinition including references to both the image capture plugin (withthe native code components needed to interact with the device-specificfunctionality) and the form entry plugin (with a form layout definitionfor the one or more data entry boxes to be displayed to the user) andtransmit the workflow definition to the client device 120 for execution.

In another example, suppose that the application 122 is an accountingapplication executing on the client device 120 and that a user of theclient device 120 is entering information from paper invoices into anaccounts payable or accounts receivable account in the accountingapplication. The application 122 can reuse the image capture plugindiscussed above. In conjunction with other plugins for extractingworkflow-specific data from a captured image of a document, theapplication 122 can extract relevant data from the captured image andprovide the relevant data to the server computer 130 hosting the APIservice 136 for performing accounting tasks.

Another benefit of decoupling the user interface and the applicationlogic is the ability to allow a user to move between devices running anapplication (e.g., 122) while executing a workflow. For example, a usermay begin a workflow (e.g., for tax preparation) on one device thatreceives a device-specific user interface (e.g., a smartphone) and laterfinish the workflow on another device, such as a desktop computer.Because the application logic is not tied to the particular platform,the application logic may be deployed dynamically to different types ofdevices through platform-specific user interfaces and enable a user toleverage the application logic in a more flexible fashion.

The application server 140 may host application logic for a specificapplication and an application programming interface (API) service 136that allows the application 122 to invoke the functionality of theapplication hosted on the server computer 130. When the API service 136receives a query from application server 140, the API service 136 canverify that the received query is valid. If the API service 136determines that the received query is valid, the API service 136 invokesthe function specified in the query. If the API service 136 determinesthat the query is invalid, the API service 136 may generate and send anerror message to the application server 140.

The plugin definition repository 150 generally stores plugin definitionsfor specific tasks implemented in a workflow. A plugin definition mayreference one or more widgets defined in the widget repository 160 andone or more functions exposed by the API service 136 and stored in theapplication logic repository 180. The widgets may define a layout of auser interface to be rendered on client device 120 and include aplurality of user interface components. As discussed above, the widgetsmay include common (i.e., non-native) user interface components, nativeuser interface components, or a combination thereof. Widgets that do notdepend on platform-specific functionality may be defined using commonuser interface components, while widgets that implement device-specificfunctionality, such as image capture, audio capture, notificationgeneration, and other device-specific functions, may use native(platform-specific) user interface elements linked to native applicationlogic. In some examples, plugin definition repository 150 may be aversioned repository, and plugin version data may be updated as theconfiguration of a plugin (e.g., widgets used by the plugin, functionsreferenced by the plugin, and the like) changes.

Widget repository 160 may store data defining widgets that can beincluded in one or more plugins defined in plugin definition repository150. Each widget stored in widget repository 160 may define a set ofuser interface components configured to perform a specific task. Forexample, widgets may include components for performing image processingor audio processing on a client device 120, components for obtainingdata entry from a user through a data entry form, and the like. Widgetsthat do not depend on platform-specific functionality are non-nativewidgets. These widgets may be cross-platform widgets, which may includeweb-based widgets or framework-based widgets. A native widget may bebuilt and implemented using code components that are native to theplatform. A cross-platform widget, for example, may be built andimplemented using web-based code components that can be executed by aweb browser (e.g., web widgets) or using cross-device framework-basedcode components that can be executed in a framework-based runtimeenvironment (e.g., framework-based widgets).

User interface component repository 170 generally stores data definingcommon user interface components that may be used by one or more widgetsto display a user interface on client device 120. In some cases, userinterface component repository 170 may store user interface componentsthat can be used across different computing platforms (i.e.,cross-platform components) and user interface components that may bespecific to a particular platform (e.g., user interface componentscorresponding to functionalities of a particular type of device runninga particular operating system). As discussed, a workflow definitiongenerated by interface generator 134 may include data identifying theplurality of user interface components to be displayed on client device120, and client device 120 can retrieve the identified user interfacecomponents from user interface component repository 170 or from userinterface components deployed on the client device 120 based on whetherthe user interface components are platform-agnostic or platform-specificfunctionality.

Application logic repository 180 may provide a versioned repositorycontaining code contracts and other software artifacts for thefunctional code implementing the workflow processed by the servercomputer 130 and displayed on the client device 120. The code contractsstored in application logic repository 180 may be associated with one ormore functions that a user can invoke through interaction with the oneor more user interface components specified in a workflow definition andassociated with a plugin associated with a step in the workflow. Eachcode contract may define, for example, the name of a function that auser can invoke, the required inputs for the function, optional inputsthat may be, but are not required to be, provided in an invocation ofthe function, and the output generated by the function. The othersoftware artifacts may further describe the one or more functions that auser can invoke, such as the functional code implementing the workflow.Server computer 130 may store application logic in the application logicrepository 180 and retrieve application logic from the application logicrepository 180.

FIG. 2 illustrates an exemplary system architecture 200 for dynamicallygenerating and deploying user interfaces in cross-platform applications.While the description of FIG. 2 focuses on web widgets as a non-nativetype of widget, the same concepts apply to other non-native widgets suchas framework-based widgets.

As illustrated, system architecture 200 generally includes a nativemobile shell 210, a web shell 220, and a native desktop shell 230, eachof which may communicate with one or more shell sandbox APIs, such asthe mobile shell sandbox API 240 and the web shell sandbox API 250, toaccess application utilities and other capabilities provided by a shellruntime, as discussed in further detail herein.

Each shell 210, 220, and 230 may allow for the dynamic generation ofcustomized user interfaces and user experiences for applicationsexecuting on top of the shell. Each shell may be made available (e.g.,via one or more data repositories) as a library that may be semanticallyversioned (e.g., versioned using a three part version number, such as1.2.3, representing a major version, a minor version and a patch,respectively). Native mobile applications may consume the mobile shell210 as a library and package the mobile shell 210 as part of theapplication. The web shell 220, however, may be hosted by an applicationserver, such as application server 140 in FIG. 1 , for a specificsoftware product and may be deployed such that applications and widgetsbuilt on the web shell 220 are continually integrated and updated. Insome aspects, the native desktop shell 230 may use similar components asthe web shell 220, because the native desktop shell 230 may beconfigured to encapsulate a web interface to deliver a software productto a user.

The shells 210, 220, and 230 may use consistent application programminginterfaces (APIs) across platforms. While the implementation of APIfunctions may differ between the mobile shell 210, the web shell 220,and the desktop shell 230, the APIs may be defined according toconsistent code contracts that define required inputs, optional inputs,and required outputs for each function exposed by the API. The inputsand outputs may be defined, for example, as a variable name and avariable type indicating a data type associated with each named variableto be provided as input into a function or generated as an output by thefunction. To promote code reuse across the shells 210, 220, and 230,cross-platform code (e.g., code written in JavaScript, PHP, or otherlanguages that can be executed in various computing environments withsimilar execution results) may be used to implement the shells 210, 220,and 230. In some aspects, each of the shells 210, 220, and 230 mayinclude functionality tailored to the unique capabilities of eachplatform. For example, because mobile devices may have less computingpower than desktop computers, laptop computers, or cloud computer farmson which an application may be executed, the mobile shell 210 mayadditionally include support for hydrating a cross-platform widget sothat the hydrated data may be stored in memory, but not loaded into anobject until the object is to be used.

Each shell 210, 220, and 230 may allow for the creation of dynamic userinterfaces and user experiences customized for a particular user bycombining native and non-native user interface components from a varietyof relevant plugins, as discussed above. The plugins selected by a shell210, 220, or 230 may be selected based on the context in which a user isexecuting the application 122 (e.g., a step in a workflow that the useris currently executing, the next step in the workflow that the user maybe expected to execute, and so on) and, in some embodiments, theplatform on which the user is executing the application 122.

In some aspects, plugins 242 and 252 may be modular, self-containedsoftware components of an application that expose specific features ofthe application. Examples of plugins may include navigation bars thatallow a user to move between different steps of a workflow executedwithin the application 122, progress bars that display an amount of theworkflow that a user has completed (and correspondingly an amount of theworkflow that remains to be completed), application-specific features,features that leverage hardware present on the computing device on whichthe application 122 is executing (e.g., image capture using one or morecameras integrated into a client device, authentication using one ormore biometric data capture devices integrated into a client device,etc.). Because each plugin may be self-contained, applications may bedecomposed into a plurality of independently maintainable components(i.e., independently debugged, updated, extended, etc.).

Each plugin (e.g., 242 or 252) may include two parts: a configurationand one or more widgets. The configuration generally identifies thewidgets included in the plugin, a code contract, permissions, thebehavior of the plugin, and intended interactions with other widgets oran application (e.g., application 122 in FIG. 1 ). In some embodiments,legacy code components (e.g., native code components that were createdfor previous versions of a software product and are intended to bereused in a cross-platform application) and third-party components(e.g., extensions to an application) may be included in a plugin to becompatible with the platform. The user interfaces associated with legacycomponents or third-party components may be implemented as a widget thatcan be loaded into a shell 210, 220, and/or 230.

Each plugin (e.g., 242 and 252) and widget (e.g., 244 and 254) may beregistered in a central configuration service, such as plugin registry260. Plugin registry 260 represents a centrally managed service thatmanages the plugin configurations that may be used by applicationshosted in shells 210, 220, 230 to provide customized user experiencesbased on, for example, preferences of the user, a geographic location ofthe client device, a language currently used by the application, etc.The plugin registry 260 generally is responsible for deliveringapplicable configuration data for a specific application.

By registering plugins in plugin registry 260, and by defining pluginsas a configuration and a plurality of widgets, different versions of across-platform application may be supported by various platforms. Forexample, an application deployed via web shell 220 and/or native desktopshell 230 may integrate cross-platform user interface generation tools,JavaScript libraries, such as Dojo, JQuery, or Angular, and othertechnologies which can be leveraged to deploy a web-based version of across-platform user interface, regardless of whether the user interfaceis being deployed in a web browser or a native application that includesa web browser component. Similarly, an application deployed via mobileshell 210 may integrate cross-platform user interface generation tools,native code components (e.g., Java components for applications deployedon Android devices or Objective C components for applications deployedon mobile device operating systems, such as iOS, Android, WindowsMobile, at the like), and other technologies that can be leveraged todeploy a native mobile version of the cross-platform user interface.

Mobile shell 210 generally is an application that executes on a mobiledevice (e.g., a smartphone, handheld computer, or tablet computer) andintegrates web-based user interfaces (UIs) and native mobile UIs tocreate a customized application that is tailored to the capabilities ofthe mobile device on which mobile shell 210 executes. To integrateweb-based UIs and native mobile UIs, an instance of web shell 220 may beintegrated into mobile shell 210 at runtime (not shown). UI componentsthat are executed as a web component (e.g., web forms, hypertext markuplanguage (HTML) UI elements, and the like) may be executed within theweb shell 220. The mobile shell 210 can additionally leveragedevice-specific capabilities using native mobile UIs and codecomponents. These device-specific capabilities may include, for example,integrated cameras for image capture and data extraction (e.g., of a taxform, a receipt, or other printed document with data to be ingested intoan application), movement or location tracking devices (e.g.,accelerometers, satellite positioning system (Global Positioning System(GPS), GLONASS, GALILEO, etc.) receivers or cellular-assisted satellitepositioning systems), and other device-specific capabilities thatwidgets can leverage to perform actions related to an application hostedin the mobile shell 210.

The web shell 220 integrated into the mobile shell 210 can delegate oneor more actions to the mobile shell 210 via a programmatic bridge, whichallows for applications executed within the mobile shell 210 to becustomized and optimized for different kinds of mobile devices. In oneexample, customization and optimization of an application executing inthe mobile shell 210 may include the use of different image capturemodules based on the capabilities of a mobile device on which the mobileshell 210 is executing. For lower-cost devices with slower processors,the image capture module executed in the mobile shell 210 may, at leastin part, offload image processing to a cloud service or anothercomputing device, while for higher-cost devices with more processingpower, the image capture module executed in the mobile shell 210 mayperform image processing and data extraction on the mobile deviceitself. In another example, the customization and optimization of anapplication executing in the mobile shell 210 may include customizationsbased on the screen size and screen resolution of the device on whichthe mobile shell 210 is executing. For a mobile shell 210 executing on asmartphone, navigation components may be hidden until requested by auser, while navigation components may be displayed in a mobile shell 210executing on a mobile device having a larger screen (e.g., a tabletcomputer). In another example, a mobile shell 210 executing on asmartphone with a high-resolution screen (e.g., a QHD (2560 pixels by1440 pixels), 4K (3840 pixels by 2160 pixels), or 8K (7680 pixels by4320 pixels) screen) may receive user interface elements that are scaledfor high-resolution screens, while a mobile shell 210 executing on amobile phone with a lower-resolution screen (e.g., a 720p (1280 pixelsby 720 pixels) or 1080p (1920 pixels by 1080 pixels) screen) may receiveuser interface elements that are scaled for lower-resolution screens.

Shells 210, 220, and 230 may host a variety of applications that shareuser interface components (e.g., widgets and plugins) to implementdifferent functionality. To reduce the storage and memory footprint ofan application hosted within a shell, shells 210, 220, and 230 may loadwidgets based on the application hosted within the shell. For example, atax preparation application may load a first set of widgets (e.g., taxliability/refund calculators, a completeness engine, tax supportmodules, emotional response modules, and the like). An accountingapplication, on the other hand, may load a different set of widgets(e.g., credit/debit calculators, statement generators, and the like), asthe functionality of the accounting application does not depend on thesame widgets as the tax preparation application.

Generally, shells 210, 220, and 230 provide a widget specification. Thewidget specification generally is a platform-neutral description of UIwidgets that is implemented by the widgets. The widgets that are loadedinto shells 210, 220, and 230 generally do not depend on the specificimplementation of a shell 210, 220, or 230. Rather, the widgets maydepend on a sandbox application programming interface (API) provided bya shell. For example, the web shell sandbox API 250 may be a commonsandbox for all cross-platform widgets. As illustrated in FIG. 2 ,mobile shell 210 exposes a mobile shell sandbox API 240 and a web shellsandbox API 250, while web shell 220 and native desktop shell 230 exposethe web shell sandbox API 250. Exposing shell sandbox APIs 240 and 250may enable widgets to access to shell services, such as commoncapabilities, application context, authentication, and the like. Becausethe widgets depend on a sandbox API 240 and/or 250, widgets can be builtwith minimal dependencies on other widgets (e.g., not loaded in theshell) or services other than those provided by the shell, which allowsthe widgets to be embeddable into any application that is hosted withina shell 210, 220, or 230.

In some embodiments, application-specific monoliths (e.g., code forgenerating a user interface and application logic) that are notcross-platform compatible may be decomposed into a plurality of widgetsthat may be hosted within a shell 210, 220, or 230. To allowapplication-specific monoliths (or components of an application-specificmonolith) to be executed within a shell 210, 220, or 230, the shells210, 220, and 230 can execute an application-specific monolith orcomponents of an application-specific monolith in a sandbox widget (notshown). The sandbox widget allows for the execution of legacy codewithin a shell 210, 220, or 230 that conforms to the functionality,calling conventions, and code execution rules enforced by sandbox APIs240 and/or 250. The sandbox widget generally delegates tasks to legacycode that implements the application-specific monolith, but exposes thefunctionality of the widget in a manner that conforms to the codecontracts established for communications between plugins and widgets inthe shells. As application-specific monoliths are transitioned towidgets and plugins, usage of the sandbox implementation ofapplication-specific monoliths may be discontinued.

Shells 210, 220, and 230 additionally provide mechanisms to enablewidgets hosted within a shell 210, 220, or 230 to communicate with otherwidgets hosted in the shell. The communications mechanisms provided by ashell may provide for asynchronous communications between differentwidgets. These communications may be, in some cases, event driven (e.g.,triggered when some condition occurs within an application, such as userinteraction with a graphical user interface element, expiration of atimer, etc.). In some cases, asynchronous communications betweendifferent widgets may be supported via communications channels betweenthe widgets.

Shells 210, 220, and 230 may provide support for login, userauthentication, and hydration of widgets. For login and userauthentication, shells 210, 220, and 230 may include modules forusername/password authentication, biometric authentication,possession-based authentication, or a combination of authenticationmethods (multi-factor authentication). Biometric authentication modulesmay interact with a variety of authentication data capture devices on aclient device, such as front-facing cameras on tablets or smartphones,web cameras on laptop or desktop computing devices, fingerprint readers,iris scanners, or other biometric devices for user authentication toallow for user enrollment and authentication.

Shells 210, 220, and 230 may be configured to support extensions.Support for extensions allows existing applications to add to thecapabilities of the shells and customize shells for application-specificneeds. For example, multiple hydration extensions may be made availablefor use in applications hosted within a shell 210, 220, or 230. Theseextensions may provide different mechanisms for mapping data into dataobjects for use in an application (or a portion of an application). Bysupporting extensions, shells 210, 220, and 230 further assist thetransition from application code monoliths to applications that aredynamically created from a plurality of independently maintainablewidgets and plugins, thereby simplifying software development andallowing for the rapid release of applications with consistent userexperiences.

As illustrated, each shell 210, 220, and 230 includes a shell core 212,222, 232, respectively, and a shell user interface 214, 224, 234,respectively. The shell cores 212, 222, 232 may include a shell kernelthat manages the lifecycle of an application hosted within a shell 210,220, or 230 and the user interface 214, 224, 234 rendered according to adevice-specific workflow definition. Lifecycle management generallyincludes initialization of an application, termination of anapplication, deferring of actions, pausing of an application (e.g., whenan application is minimized or otherwise placed in a suspended state),state recovery (e.g., when an application is maximized or otherwisereactivated from a suspended state), and the like. The shell cores 212,222, 232, may further provide support for hydration, plugin/widgetmanagement, event handling, asynchronous communications, and shellextension and customization.

Shell user interfaces 214, 224, 234 render user interfaces dynamicallybased on client device information and the workflow that a user isexecuting. Shell user interfaces 214, 224, 234 provide layout andnavigation management, flow control (e.g., to control the transitionfrom one step to another step of a workflow implemented by anapplication hosted in shells 210, 220, or 230), userlogin/authentication, and the like. Shell user interfaces 214, 224, 234may be a barebones (or blank) user interface. Applications hosted withina shell 210, 220, or 230 can populate shell user interface 214, 224, 234with the graphical user interface elements that enable a user to performone or more tasks. Applications using a shell user interface 214, 224,234 generally define the user experience, which allows for applicationdevelopment teams of each shell UI to customize the user experience forthe specific platform and application hosted within a correspondingshell 210, 220, or 230.

As illustrated, shell sandbox APIs 240 and 250 allow for execution of avariety of plugins and widgets. The specific plugins and widgets hostedin sandbox APIs 240 and 250 may be determined based on a type of devicebeing used (e.g., native mobile widgets may be executed using mobileshell sandbox API 240, while web widgets may be executed using web shellsandbox API 250). As illustrated, mobile shell sandbox API 240 supportsthe execution of plugins 242, including one or more mobile widgets 244,a legacy mobile UI 246 (e.g., a UI associated with legacy code monolithsimplemented as a widget that can be loaded into a shell 210, 220, and/or230 of architecture 200), and third-party mobile UIs (e.g. 248)associated with extensions to one or more applications. Web shellsandbox API 250, which may be leveraged by any of mobile shell 210, webshell 220, and desktop shell 230 for the execution of web-based widgets,supports the execution of plugins 252, including one or more web widgets254, a legacy web UI 256 associated with legacy code monolithsimplemented as a widget that can be loaded into a shell (e.g. shells210, 220, and/or 230) of architecture 200, and third-party web UIs(e.g., 258) associated with extensions to one or more web applications.Third-party UIs 248 and 258 may be developed and deployed by otherdevelopers for integration into one or more software product offeringsthat may be executed within a shell 210, 220, or 230.

Shell sandbox APIs 240 and 250 may provide mobile widgets 244 and webwidgets 254 access to application utilities 280 and common capabilities.The application utilities 280 and common capabilities may be provided bya shell runtime. These utilities and common capabilities may include,for example, activity logging, analytics, authorization contexttracking, application context tracking, and so on. The shell sandboxAPIs 240 and 250 may provide a versioned public code contract thatdefines how consumers (i.e., different widgets and plugins, regardlessof whether a widget or plugin is a first-party widget or plugin or athird-party widget or plugin) interact with the sandbox and thefunctionality exposed by shell sandbox APIs 240 250. At runtime, shells210, 220, and 230 can create an instance of a sandbox and make thesandbox available to widgets at runtime, and the widgets loaded into ashell 210, 220, or 230 can access sandbox-provided services according tothe versioned public code contract. In some aspects, the sandbox APIs240, 250 may be extended by applications hosted in a shell 210, 220, or230 to add application-specific features and behavior.

As discussed, application utilities 280 may be provided to widgets andplugins via one of shell sandbox APIs 240 or 250. In some cases, theutilities may include an application shell service 270, which managesinitializing each shell by orchestrating between a plugin registry 260and platform services for the relevant data to initialize the shell,which may be customized for a specific application and platform (e.g.,for application X on mobile, on web, and on desktop/laptop computers).In some aspects, a mobile version of application shell service 270 maydefine a default configuration for initialization that may be packagedwith a mobile application to optimize the performance of the mobileapplication.

FIG. 3 illustrates an example shell architecture 300 for dynamicallygenerating and deploying user interfaces in cross-platform applications.As illustrated, shell architecture 300 generally includes a shellframework 305 and services 380.

Shell framework 305 generally comprises a majority of the applicationcode and provides the underlying architecture that enables the dynamicgeneration of user interfaces for applications based on user context,device information, and so on. As illustrated, shell framework 305includes a user experience layer 310, a user interface framework 320, acommon user interface layer 330, core services 340, applicationutilities 350, application data 360, and foundation layer 370.

User experience layer 310 generally hosts a plurality of plugins 311,312, 313, other widgets 314 and a widget application programminginterface (API) 315. Semantic UI plugin 311 generally hosts a pluralityof cross-platform widgets 311-1. The cross-platform widgets 311-1generally are widgets that may be rendered on a variety of computingdevices (e.g., smartphones executing various operating systems, desktopcomputers, laptop computers, tablets, etc.) in either native applicationshells or a web shell executable within a web browser.

Native UI plugin 312 generally hosts a plurality of device-specificwidgets 312-1, which may implement a variety of device-specificfeatures.

Content Management System (CMS) UI plugin 313 generally hosts aplurality of widgets 313-1 that are used to implement a contentmanagement system within an application hosted within a shell. These CMSwidgets 313-1, for example, provide document versioning, documenttracking, and other services that can be used to manage documentsuploaded and created by an application.

Other widgets 314 generally include, for example, widgets 314-1, whichmay include any additional widgets written using current technology ornew technology that may be added over time.

Widget API 315 generally provides an interface to the various widgetsincluded in the one or more plugins 311, 312, 313, 314 to allow thewidgets to access one or more tools hosted in the shell core 340 and/orapp utilities 350, access app data 360, or interact with device hardwarethrough foundation layer 370.

Shell UI framework 320 generally implements one or more modules that aidin rendering a user interface on a device. As illustrated, shell UIframework 320 generally includes a layout management engine 321,composition and routing engine 322, UI orchestration engine 323, andplugin orchestration engine 324. Layout management engine 321 generallyuses information in a device-specific workflow definition to determinean order in which plugins, widgets, and the associated user interfaceelements are displayed on a device. Composition and routing engine 322generally renders the user interface on a device and instantiates one ormore event handlers to route user interaction to the appropriatefunction or code module for processing. UI orchestration engine 323 isgenerally a data-driven engine that uses data input into an applicationto orchestrate events that are invoked within an application. Pluginorchestration engine 324 generally orchestrates communications betweendifferent plugins, as discussed above.

Common UI 330 generally includes common user interface components thatare shared across different versions of a shell (i.e., shared acrossnative mobile shell 210, web shell 220, and native desktop shell 230).As illustrated, common UI 330 includes a UI component library 332, whichmay include information defining the various shared user interfacecomponents that can be rendered on a device. A plugin can referencespecific components defined in UI component library 332 in a definitionof the visual layout or organization of the plugin. When shell UIframework 320 renders the plugin, shell UI framework 320 accesses UIcomponent library 332 to obtain definitions of the common UI componentsand renders the plugin according to the obtained definition.

Shell core 340 generally hosts one or more modules that enable executionof applications within an application shell. As illustrated, shell core340 includes a widget integration module 341, service integration module342, data integration module 343, event manager 344, and a native codebridge 345.

Application utilities 350 generally include the common utilitiesleveraged by various applications during execution. These utilities mayinclude, among others, a logging utility 351, a beaconing utility 352,testing utility 353, service orchestration utility 354, andauthorization utility 355. These utilities may be implemented accordingto a code contract that is consistent across different shells (i.e.,across native mobile shell 210, web shell 220, and native desktop shell230) so that application utilities 350 work consistently acrossdifferent platforms.

Application data layer 360 generally stores data models and user data ata local device and delivers the data to a remote source. Data model 361generally defines relationships between data objects that are usedwithin an application. The definitions may include the names ofvariables, data types, and other information that defines a data objectand the interactions between different data objects. Data store 362 maybe a relational or non-relational database that stores user dataaccording to one or more of data models 361. Caching mechanism 363 mayorchestrate the transmission of data to a remote source for commitmentto a remote database.

Foundation layer 370 generally includes modules that interact withdevice hardware and define the low-level behavior of an applicationshell 305. As illustrated, foundation layer 370 includes a networkingmodule 371, configuration module 372, resource loading module 373, andutilities module 374. Networking module 371 generally provides aninterface through which an application executing within an applicationshell communicates with other computing devices. This interface mayinclude, for example, functions that convert data into a bitstream thatmay be encapsulated into one or more packets for transmission to anotherdevice via a network interface, such as a wired interface, an 802.11wireless interface, a cellular wireless interface, or other datatransfer interfaces. Configuration module 372 generally configures theapplication shell 305 for execution on a specific device. Resourceloading module 373 allows an application executing within an applicationshell to reserve resources (e.g., temporary and/or persistent memory,CPU time, etc.) on a device to allow for execution of the application.Utilities module 374 generally provides basic utilities that theapplication shell 305 uses for error recovery, memory management, andother purposes.

As discussed above, widgets and plugins hosted within an applicationshell 305 may interact with various services 380 through, for example,service integration module 342 in shell core 340. As illustrated, theservices that support execution of applications within an applicationshell 305 may include product-specific UI services 381, a pluginrepository 382, an application programming interface (API) service 383,and data transfer services 384. Product-specific UI services 381generally provide product-specific user interface data to an applicationexecuting in application shell 305. As discussed in detail above, anapplication shell 305 can interact with plugin repository 382 toretrieve the appropriate version of a plugin and the widgets identifiedin a plugin definition for rendering on a user device. During executionof an application, the application may invoke one or more functions of aremote processing system represented by API service 383, which definesthe functions that can be invoked by the application, the required andoptional data inputs, and the type of data returned in response to thefunction call (if any). To invoke a function exposed by API service 383,a data transfer service 384 may provide a gateway between theapplication executing on a client device and the API service. Thegateway may receive a request from a client device, generate and invokea function call based on the received request, receive data from APIservice 383, and return the received data to the client device on whichthe application shell 305 is executing.

Example Third Party Integration

FIG. 4 illustrates an exemplary shell core 400 that integrates pluginsand widgets into an application. As illustrated, shell core 400generally includes one or more widgets 410, a native widget proxyservice 420, a platform-agnostic widget proxy service 430, a shellsandbox 440, and a bridge interface 450.

The shell core 400 may receive a workflow definition specifying one ormore widgets 410 to be loaded into the shell core 400. The widgets 410loaded in the shell core 400 may include native widgets or non-nativewidgets. Each widget in widgets 410 includes a widget descriptor. Thewidget descriptor for a given widget may include a unique ID for thewidget, one or more functions that can be performed by the widget, oneor more events that the widget is capable of generating, properties thewidget has available, properties necessary for the widget to perform afunction or generate an event, and the like. The widget descriptor maybe used by an application (e.g., application 122 in FIG. 1 ) to identifya widget and a function to be executed by that widget.

A native widget may be a widget built using code that is native to theplatform in which the shell core 400 is executing. A cross-platform(i.e., platform-agnostic) widget may be built using code that is notnative to the platform but compatible with the shell core 400. Across-platform widget may execute within a runtime container provided bythe shell core 400.

The native widget proxy service 420 provides an interface between one ormore native widgets and the shell sandbox 440. The native widget proxyservice 420 may monitor all communications to and from the nativewidgets. Although the native widgets can communicate directly with theapplication, by monitoring communications of the native widgets, thenative widget proxy service 420 enables the shell core 400 to maintaincurrent data for activity logging and analytics.

The platform-agnostic widget proxy service 430 may provide a runtimeenvironment in which cross-platform widgets may execute. For example,the platform-agnostic widget proxy service 430 may provide an internetbrowser-based runtime environment in which web-based widgets areexecuted and a framework-based runtime environment in whichframework-based widgets are executed.

The platform-agnostic widget proxy service 430 may be initialized by theshell core 400 when a cross-platform widget is to be loaded into widgets410. For example, upon the application requesting a cross-platformwidget, the shell core 400 may create the platform-agnostic widget proxyservice 430 to host the cross-platform widget.

The shell sandbox 440 may provide common services for both nativewidgets and cross-platform widgets, such as activity logging, analytics,application context tracking, authentication, and the like. An instanceof the shell sandbox 440 may be provided to each widget, whether anative widget or a cross-platform widget. An instance of the shellsandbox 440 provided to a widget may provide an interface between thewidget and a shell sandbox API (e.g., shell sandbox APIs 240 and 250 inFIG. 2 ).

The platform-agnostic widget proxy service 430 may route communicationsto and from cross-platform widgets to the shell sandbox 440 so that theshell sandbox 440 can update activity logs and analytics data for thewidgets. The shell sandbox 440 enables integration of plugins andwidgets built with different technologies (e.g., native widgets based onan operating system of the client device, web-based widgets, andframework-based widgets).

To load a cross-platform widget into widgets 410 in the shell core 400,the application may provide the widget descriptor of the cross-platformwidget to the shell core 400. The application may also provide a contextof the application at the time when the application requests to load thecross-platform widget. The context may include at least one of ageographic location of the client device, a language currently used bythe application, or a context of the user. The context provided by theapplication may affect a behavior of the widget or how the widget isrendered by the application.

To unload a widget from the shell core 400, memory reserved for thatwidget may be deallocated. For a cross-platform widget, the shell core400 may deallocate memory reserved for that widget. However, theplatform-agnostic widget proxy service 430 may remain in the shell core400 to be reused by another cross-platform widget. An unload request maybe received from the application once the widget to be unloaded is nolonger needed by the application.

A cross-platform widget may be designed to execute in an applicationother than the application on a client device (e.g., client device 120in FIG. 1 ). In that case, the cross-platform widget may not becompatible with the application on the client device. However, toprovide a user experience within the application consistent with a userexperience within the application for which the cross-platform widgetwas designed, a web page may be used to provide a consistent userexperience across different platforms.

For example, the shell core 400 may execute within an inline frame of aweb page provided by the application. The bridge interface 450 providesan interface between an application server 480 and the inline frame inwhich the shell core 400 is executing. If the shell core 400 isexecuting within the application, the bridge interface provides aninterface directly between an application server 480 and the shell core400. The bridge interface 450 federates communications between theapplication and widgets loaded in the shell core 400. All communicationsto and from a given cross-platform widget may be routed through thebridge interface 450. That is, the bridge interface 450 may controlwidget-to-widget communication as well as widget-to-application andapplication-to-widget communication. Although a widget executing in theplatform-agnostic widget proxy service 430 can communicate directly withanother widget executing in the same proxy 430, any communicationbetween the widgets may be routed to the bridge interface 450 so thatthe bridge interface 450 can monitor and track all communicationsbetween widgets.

In some cases, a communication through the bridge interface 450 may beevent driven. For example, a widget may transmit a communication to theapplication upon completion of a function requested by the application.In some cases however, the communication itself or data within thecommunication may trigger an event. For example, an application workflowdefinition may specify that a widget designed to create an invoice is tocreate an invoice for a user of the client device. Upon creating theinvoice, the widget may transmit a communication to the applicationindicating that the invoice has been created. The communication may alsoinclude information associated with a corresponding transaction such asan amount. When the communication is processed by the bridge interface450, if the amount satisfies a threshold value, a message may betransmitted to the application, which, in response to the message,generates an alert to be displayed to inform the user that the invoiceexceeds the threshold value.

The application server 480 may receive data from the applicationdirected to a widget loaded in the shell core 400. For example, theapplication server 480 may receive data input by the user into a userinterface of the client device. The application server 480 may transmitthe received data to the bridge interface 450. In some embodiments, theapplication may execute within a second inline frame of the web pageprovided by the client device.

Utilizing an inline frame enables a user experience to be consistentacross different platforms because an inline frame allows a userexperience to be easily transitioned between different platforms. Forexample, a user may begin a workflow on one device that receives adevice-specific user interface (e.g., a smartphone) and later finish theworkflow on another device, such as a desktop computer. Because thefunctionalities and user interface elements provided by the shell coreare not tied to a particular platform or application, a user canflexibly transition the user experience between platforms.

Upon receiving a communication between the application server 480 and aparticular widget loaded in the shell core, the bridge interface 450 maydetermine a destination of the communication. For example, if thecommunication is received from the application and directed to a widget,the bridge interface 450 may identify a destination widget based on awidget descriptor in the communication. In that case, the bridgeinterface 450 may determine if the destination widget is currentlyloaded into widgets 410. If so, the bridge interface 450 routes thecommunication to the destination widget. However, if the widget is notloaded in the shell core 400, the widget currently loaded in the shellcore 400 may be unloaded from widgets 410 and the destination widget maybe loaded into widgets 410 the shell core 400. The bridge interface 450may then route the communication to the destination widget.

In addition to determining a destination widget, the bridge interface450 may identify a function specified in the communication that is to beinvoked at the destination widget as well as parameters needed toexecute the function. For example, if the function specified in thecommunication involves creating a user profile for the user of theclient device, parameters to execute the function may includeinformation identifying the user. Information identifying the user mayinclude a name of the user, an email address of the user, a home addressof the user, and the like. The bridge interface 450 transmits thefunction to be invoked at the destination widget and the parameters toexecute the function to the destination widget.

If the bridge interface 450 receives a communication from a widget 410loaded in the shell core 400 directed to the application, thecommunication may be routed through the application server 480. Thecommunication from the widget may invoke an event at the application.For example, the communication may cause the application to transitionfrom a widget currently executing a function requested by theapplication to another widget. In that case, the bridge interface 450may determine if the other widget is currently loaded in widgets 410 inthe shell core 400. If so, the bridge interface 450 routes thecommunication to the application, which requests a function to beexecuted by the other widget. However, if the other widget is notcurrently loaded, shell core may load the other widget into widgets 410before the bridge interface 450 routes the communication to theapplication.

FIG. 5 illustrates example operations 500 for invoking an event at across-platform widget, according to one embodiment.

As shown, the operations 500 start at step 505 where a bridge interface(e.g., bridge interface 450 in FIG. 4 ) receives a communication fromthe application directed to a cross-platform widget. The communicationmay include a widget descriptor for the destination widget. The widgetdescriptor may include a unique ID for the destination widget, one ormore functions that the destination widget can execute, one or moreevents that the widget is can generate, parameters of the widget,parameters necessary to execute a function or generate an event, and thelike. The communication may also specify a function to be invoked at thedestination widget.

At step 510, the bridge interface identifies a destination widget of thecommunication. The destination widget of the communication may beidentified based on the widget descriptor included in the communication.

At step 515, the bridge interface identifies a function to be invoked atthe destination widget. The function to be invoked at the destinationwidget is specified in the communication from the application. In somecases, the destination widget may be designed to execute only onespecific function. Thus, the function to be invoked by the widget maynot be specified in the communication. Rather, the communication maymerely identify the destination widget and parameters necessary toexecute the function, as discussed below.

At step 520, the bridge interface determines parameters needed by thedestination widget to execute the function identified in step 515. Insome cases, the parameters may be included in the communication from theapplication. For example, to invoke a function to create an invoice thewidget may need parameters such as a date of a transaction, an amount ofthe transaction, an identity of the parties involved in the transaction,an identity of goods or services involved in the transaction, and thelike. However, the parameters needed to execute the function may dependon another function that is executed by another widget. In that case,the bridge interface may request the other widget to execute the otherfunction in order to obtain the necessary parameters. Once the otherfunction is executed by the other widget and the necessary parametersare obtained, the operations proceed to step 525.

At step 525, the bridge interface transmits the function to be invokedand the parameters to the destination widget.

FIG. 6 is a call flow diagram 600 illustrating an example messageexchange between an application and a widget for invoking an event atthe widget, according to one embodiment.

As illustrated, a bridge interface (e.g., bridge interface 450 in FIG. 4) may receive a message 605 from the application. The message mayinclude a widget ID of the destination widget, a function to be invokedat the destination widget, and parameters needed to execute thefunction.

As discussed above, the parameters needed to execute the function maynot be included in the communication. In that case, to obtain thenecessary parameters, the bridge interface may identify where theparameters are stored or a function that needs to be invoked by adifferent widget.

Once the parameters to execute the function are obtained, the bridgeinterface transmits a message 610 including the function to be invokedand the parameters to the destination widget.

FIG. 7 illustrates example operations 700 for invoking an event at theapplication to transition from a first widget to a second widget,according to one embodiment.

As shown, the operations begin at step 705 where a bridge interface(e.g., bridge interface 450 in FIG. 4 ) receives a first workflowdefinition from an application server (e.g., application server 140 inFIG. 1 ). The first workflow definition may specify one or more widgetsto be loaded into a shell core (e.g., shell core 400 in FIG. 4 ).

At step 710, the bridge interface identifies a first cross-platformwidget specified in the first workflow definition. The firstcross-platform widget may be identified by a unique ID of the firstcross-platform widget included in the first workflow definition.

At step 715, the shell core loads the first cross-platform widget into aruntime environment. To load the first cross-platform widget, the shellcore may instantiate a proxy service (e.g., a platform-agnostic widgetproxy service 430 in FIG. 4 ) to provide the runtime environment.

At step 720, the bridge interface receives a second workflow definitionfrom the application server. The second workflow definition may specifyone or more widgets to be loaded into the shell core.

At step 725, the bridge interface identifies a second cross-platformwidget specified in the second workflow definition. A unique widget IDin the second workflow definition may be used to identify the secondcross-platform widget.

At step 730, the bridge interface determines whether the secondcross-platform widget to be loaded into the runtime environment is thesame as the first cross-platform widget currently loaded in the runtimeenvironment. To do so, the bridge interface may compare the uniquewidget ID of the first cross-platform widget to the unique widget ID ofthe second cross-platform widget. If the second cross-platform widget isthe same as the first cross-platform widget, the second cross-platformwidget is already loaded in the runtime environment and the secondworkflow can be executed.

However, if the second cross-platform widget is not the same as thefirst cross-platform widget, the first cross-platform widget is unloadedfrom the runtime environment at step 735.

At step 740, the second cross-platform widget is loaded into the runtimeenvironment. As discussed above, the second cross-platform widget may beloaded into a runtime environment provided by a widget proxy.

FIG. 8 illustrates an exemplary computing system for deployingcross-platform applications on a client device while maintaining aconsistent user experience across platforms, according to oneembodiment. As shown, the system 800 includes a central processing unit(CPU) 802, one or more I/O device interfaces 804 which may allow for theconnection of various I/O devices 814 (e.g., keyboards, displays, mousedevices, pen input, etc.) to the system 800, network interface 806, amemory 808, storage 810, and an interconnect 812.

CPU 802 may retrieve and execute programming instructions stored in thememory 808. Similarly, the CPU 802 may retrieve and store applicationdata residing in the memory 808. The interconnect 812 transmitsprogramming instructions and application data, among the CPU 802, I/Odevice interface 804, network interface 806, memory 808, and storage810. CPU 802 is included to be representative of a single CPU, multipleCPUs, a single CPU having multiple processing cores, and the like.Additionally, the memory 808 is included to be representative of arandom access memory. Furthermore, the storage 810 may be a disk drive,solid state drive, or a collection of storage devices distributed acrossmultiple storage systems. Although shown as a single unit, the storage810 may be a combination of fixed and/or removable storage devices, suchas fixed disc drives, removable memory cards or optical storage, networkattached storage (NAS), or a storage area-network (SAN).

As shown, memory 808 includes an application 815 and a shell 820. Asillustrated, the shell 820 includes a shell core 822 including a nativewidget proxy service 830, a platform-agnostic widget proxy service 840,a bridge interface 850, and a shell sandbox 860. A widget may define acollection of user interface elements to be rendered on a device tocomplete a workflow step or to enable a user to input data into theapplication 815. The native widget proxy service 830 may include one ormore native widgets 832. The platform-agnostic widget proxy service 840may provide a runtime environment (not shown) in which one or moreframework-based widgets 842 and one or more web-based widgets 844 mayexecute.

The shell 820 may execute within an inline frame of a web page providedby the application 815.

The bridge interface 850 provides an interface between the application815 and the shell core 822. The bridge interface 450 federatescommunications between the application 815 and widgets loaded in theshell core 400 (e.g., native widgets 832, framework based widgets 842,web based widgets 844). All communications to and from a cross-platformwidget may be routed through the bridge interface 450. Thus, the bridgeinterface 450 may monitor and track all widget-to-widget communicationas well as widget-to-application and application-to-widgetcommunication.

The shell sandbox 860 may provide common services to native andcross-platform widgets. The common services may include activitylogging, analytics, application context tracking, authentication, andthe like. All communications to and from a widget may be routed to theshell sandbox 860. The shell sandbox 860 may route the eachcommunication to a corresponding destination.

The shell sandbox 860 may also load and unload widgets (e.g., nativewidgets 832, framework-based widgets 842, and web-based widgets 844)from the shell core 822. To load a cross-platform widget (e.g., aframework-based widget 842 or a web-based widget 844), the shell core822 may create a platform-agnostic widget proxy service in which thewidget is loaded. The platform-agnostic widget proxy service may providea runtime environment in which the cross-platform widget executes.

As shown, storage 810 includes a workflow definition store 870. Theworkflow definition store 870 may store one or more workflow definitionsprovided by the application 815. A given workflow may specify one ormore widgets to be loaded into the shell core 822.

Note, descriptions of embodiments of the present disclosure arepresented above for purposes of illustration, but embodiments of thepresent disclosure are not intended to be limited to any of thedisclosed embodiments. Many modifications and variations will beapparent to those of ordinary skill in the art without departing fromthe scope and spirit of the described embodiments. The terminology usedherein was chosen to best explain the principles of the embodiments, thepractical application or technical improvement over technologies foundin the marketplace, or to enable others of ordinary skill in the art tounderstand the embodiments disclosed herein.

In the preceding, reference is made to embodiments presented in thisdisclosure. However, the scope of the present disclosure is not limitedto specific described embodiments. Instead, any combination of thepreceding features and elements, whether related to differentembodiments or not, is contemplated to implement and practicecontemplated embodiments. Furthermore, although embodiments disclosedherein may achieve advantages over other possible solutions or over theprior art, whether or not a particular advantage is achieved by a givenembodiment is not limiting of the scope of the present disclosure. Thus,the aspects, features, embodiments, and advantages discussed herein aremerely illustrative and are not considered elements or limitations ofthe appended claims except where explicitly recited in a claim(s).

Aspects of the present disclosure may take the form of an entirelyhardware embodiment, an entirely software embodiment (includingfirmware, resident software, micro-code, etc.) or an embodimentcombining software and hardware aspects that may all generally bereferred to herein as a “circuit,” “module” or “system.” Furthermore,aspects of the present disclosure may take the form of a computerprogram product embodied in one or more computer readable medium(s)having computer readable program code embodied thereon.

Any combination of one or more computer readable medium(s) may beutilized. The computer readable medium may be a computer readable signalmedium or a computer readable storage medium. A computer readablestorage medium may be, for example, but not limited to, an electronic,magnetic, optical, electromagnetic, infrared, or semiconductor system,apparatus, or device, or any suitable combination of the foregoing. Morespecific examples a computer readable storage medium include: anelectrical connection having one or more wires, a hard disk, a randomaccess memory (RAM), a read-only memory (ROM), an erasable programmableread-only memory (EPROM or Flash memory), an optical fiber, a portablecompact disc read-only memory (CD-ROM), an optical storage device, amagnetic storage device, or any suitable combination of the foregoing.In the current context, a computer readable storage medium may be anytangible medium that can contain, or store a program.

While the foregoing is directed to embodiments of the presentdisclosure, other and further embodiments of the disclosure may bedevised without departing from the basic scope thereof, and the scopethereof is determined by the claims that follow.

What is claimed is:
 1. A system comprising: one or more processors; anda memory comprising executable instructions that, when executed by theone or more processors, cause the system to: receive, from anapplication server, a workflow definition specifying one or more widgetsto be loaded into a shell executing within a given application, whereineach respective widget of the one or more widgets comprises a nativewidget, a cross-platform web-based widget, or a cross-platform frameworkwidget; initialize, by the shell, in response to the workflow definitionspecifying a native widget, a native runtime environment provided by anative widget proxy service; initialize, by the shell, in response tothe workflow definition specifying a cross-platform web-based widget, abrowser-based runtime environment provided by a platform-agnostic widgetproxy service; initialize, by the shell, in response to the workflowdefinition specifying a cross-platform framework widget, aframework-based runtime environment provided by the platform-agnosticwidget proxy service; obtain, from the application server, a widget ofthe one or more widgets; instantiate a runtime environment for thewidget, the runtime environment including a bridge interface between theapplication server and the shell for facilitating communicationsinvolving widgets of the one or more widgets or involving the givenapplication, the bridge interface being configured to processcommunications executing in the native runtime environment, thebrowser-based runtime environment, and the framework-based runtimeenvironment; load the widget into the runtime environment for executionof the widget; and process, through the bridge interface, acommunication involving the widget.
 2. The system of claim 1, the memoryfurther comprising executable instructions that, when executed by theone or more processors, cause the system to: receive, from across-platform widget, an additional message to transmit to theapplication server, the additional message including an indication of afunction to be invoked at the application server; and transmit theadditional message to the application server.
 3. The system of claim 1,the memory further comprising executable instructions that, whenexecuted by the one or more processors, cause the system to: receive,from the application server, a second workflow definition identifying anadditional widget to be loaded into a runtime environment; determinethat the additional widget is different than a loaded widget; unload theloaded widget from the runtime environment; load the additional widgetinto the runtime environment; and expose functionality of the additionalwidget to the given application.
 4. The system of claim 3, wherein atransition by the given application from the loaded widget to theadditional widget comprises deallocating memory reserved for the loadedwidget in the shell and allocating memory for the additional widget inthe shell, the loaded widget and the additional widget interfacing witha shell sandbox for the shell.
 5. The system of claim 1, wherein thecommunication comprises a message from a first cross-platform widgethosted by the platform-agnostic widget proxy service to a secondcross-platform widget hosted by the platform-agnostic widget proxyservice.
 6. The system of claim 1, the memory further comprisingexecutable instructions that, when executed by the one or moreprocessors, cause the system to process, through the bridge interface, agiven communication, the given communication comprising a communicationto a cross-platform web-based widget and a communication to across-platform framework widget.
 7. The system of claim 6, the memoryfurther comprising executable instructions that, when executed by theone or more processors, cause the system to transmit, by the bridgeinterface, parameters for executing a first function at thebrowser-based cross-platform widget, and parameters for executing asecond function at the cross-platform framework widget based on thegiven communication.
 8. A method for widget integration, comprising:receiving, from an application server, a workflow definition specifyingone or more widgets to be loaded into a shell executing within a givenapplication, wherein each respective widget of the one or more widgetscomprises a native widget, a cross-platform web-based widget, or across-platform framework widget; initializing, by the shell, in responseto the workflow definition specifying a native widget, a native runtimeenvironment provided by a native widget proxy service; initializing, bythe shell, in response to the workflow definition specifying across-platform web-based widget, a browser-based runtime environmentprovided by a platform-agnostic widget proxy service; initializing, bythe shell, in response to the workflow definition specifying across-platform framework widget, a framework-based runtime environmentprovided by the platform-agnostic widget proxy service; obtaining, fromthe application server, a widget of the one or more widgets;instantiating a runtime environment for the widget, the runtimeenvironment including a bridge interface between the application serverand the shell for facilitating communications involving widgets of theone or more widgets or involving the given application, the bridgeinterface being configured to process communications executing in thenative runtime environment, the browser-based runtime environment, andthe framework-based runtime environment; loading the widget into theruntime environment for execution of the widget; and processing, throughthe bridge interface, a communication involving the widget.
 9. Themethod of claim 8, further comprising: receiving, from a cross-platformwidget, an additional message to transmit to the application server, theadditional message including an indication of a function to be invokedat the application server; and transmitting the additional message tothe application server.
 10. The method of claim 8, further comprising:receiving, from the application server, a second workflow definitionidentifying an additional widget to be loaded into a runtimeenvironment; determining that the additional widget is different than aloaded widget; unloading the loaded widget from the runtime environment;loading the additional widget into the runtime environment; and exposingfunctionality of the additional widget to the given application.
 11. Themethod of claim 10, wherein a function comprises a transition by thegiven application from the loaded widget to the additional widgetcomprises deallocating memory reserved for the loaded widget in theshell and allocating memory for the additional widget in the shell, theloaded widget and the additional widget interfacing with a shell sandboxfor the shell.
 12. The method of claim 8, wherein the communicationcomprises a message from a first cross-platform widget hosted by theplatform-agnostic widget proxy service to a second cross-platform widgethosted by the platform-agnostic widget proxy service.
 13. The method ofclaim 8, further comprising processing, through the bridge interface, agiven communication, the given communication comprising a communicationto a cross-platform web-based widget and a communication to across-platform framework widget.
 14. The method of claim 13, furthercomprising transmitting, by the bridge interface, parameters forexecuting a first function at the browser-based cross-platform widget,and parameters for executing a second function at the cross-platformframework widget based on the given communication.
 15. A method forwidget integration, comprising: receiving, from an application server, aworkflow definition specifying one or more widgets to be loaded into ashell executing within a given application, wherein each respectivewidget of the one or more widgets comprises a native widget, across-platform web-based widget, or a cross-platform framework widget;initializing, by the shell, in response to the workflow definitionspecifying a native widget, a native runtime environment provided by anative widget proxy service; initializing, by the shell, in response tothe workflow definition specifying a cross-platform web-based widget, abrowser-based runtime environment provided by a platform-agnostic widgetproxy service; initializing, by the shell, in response to the workflowdefinition specifying a cross-platform framework widget, aframework-based runtime environment provided by the platform-agnosticwidget proxy service; obtaining, from the application server, a widgetof the one or more widgets; instantiating a runtime environment for thewidget, the runtime environment including a bridge interface between theapplication server and the shell for facilitating communicationsinvolving widgets of the one or more widgets or involving the givenapplication, the bridge interface being configured to processcommunications executing in the native runtime environment; loading thecross-platform widget into the runtime environment; and processing,through the bridge interface, a communication involving the widget. 16.The method of claim 15, further comprising: receiving, from across-platform widget, an additional message to transmit to theapplication server, the additional message including an indication of anadditional function to be invoked at the application server; andtransmitting the additional message to the application server.
 17. Themethod of claim 15, further comprising: receiving, from the applicationserver, a second workflow definition identifying an additional widget tobe loaded into a runtime environment; determining that the additionalwidget is different than a loaded widget; unloading the loaded widgetfrom the runtime environment; loading the additional widget into theruntime environment; and exposing functionality of the additional widgetto the given application.
 18. The method of claim 17, wherein atransition by the given application from the loaded widget to theadditional widget, deallocating memory reserved for the loaded widget inthe shell, and allocating memory for the additional widget in the shell,the loaded widget and the additional widget interfacing with a shellsandbox for the shell.
 19. The method of claim 15, wherein thecommunication comprises a message from a first cross-platform widgethosted by the platform-agnostic widget proxy service to a secondcross-platform widget hosted by the platform-agnostic widget proxyservice.
 20. The method of claim 15, further comprising processing,through the bridge interface, a given communication, the givencommunication comprising a communication to a cross-platform web-basedwidget and a communication to a cross-platform framework widget.